*****************************************************************************
* RATS code: Example 10.6 
* File: Bootstrap-SETAR.prg
* written by Jing Li
*
* THREE METHODS FOR OBTAINING ONE-SAMPLE PREDICTION INTERVALS OF SETAR MODELS
* 
* INPUT:
* nb  = number of bootstrap replicates
* nmm = number of MC simulations
* ob  = number of observations
* c1  = AR parameter first regime
* c   = AR parameter second regime
* tau = threshold parameter
* mm  = number of distributions [N(0,1), chi^{2}(4), t(5)]
*
* OUTPUT:
* CPI_1 CPI_2  CPI_3
*
* [BPIi_j for forecast horizons 1-8
*         i=1,2,3, i.e. i denotes the 3 BS methods,
*         j=1,2,3, i.e. j denotes the 3 distributions 
*                        1=N(0,1), 2=chi^{2}(4), 3=t(5)]
* BPI1_1 BPI2_1 BPI3_1 BPI1_2 BPI2_2 BPI3_2 BPI1_3 BPI2_3 BPI3_3 
* (in total a 9 * 8 matrix)
* 
* Reference:
* Li, J. (2011).
* Bootstrap prediction intervals for SETAR models.
*   International Journal of Forecasting, 27(2), 320-332.
*   DOI: 10.1016/j.ijforecast.2010.01.013.
******************************************************************************
com c1 = -0.4, c = 0.5, tau = 0.0, mm=1
com ob = 100, nb = 1000, nk = 100, nmm = 500
all ob

do dis = 1, 3
set tar 1 8 = 0.; set tarb1 1 8 = 0.; set tarb2 1 8 = 0.; set tarb3 1 8 = 0.
set hor 1 8 = t
set ct1 1 nmm = 0.; set ct2 1 nmm = 0.; set ct3 1 nmm = 0.; set ct4 1 nmm = 0.
set ct5 1 nmm = 0.; set ct6 1 nmm = 0.; set ct7 1 nmm = 0.; set ct8 1 nmm = 0.

set cb11 1 nmm = 0.; set cb12 1 nmm = 0.; set cb13 1 nmm = 0.; set cb14 1 nmm = 0.
set cb15 1 nmm = 0.; set cb16 1 nmm = 0.; set cb17 1 nmm = 0.; set cb18 1 nmm = 0.

set cb21 1 nmm = 0.; set cb22 1 nmm = 0.; set cb23 1 nmm = 0.; set cb24 1 nmm = 0.
set cb25 1 nmm = 0.; set cb26 1 nmm = 0.; set cb27 1 nmm = 0.; set cb28 1 nmm = 0.

set cb31 1 nmm = 0.; set cb32 1 nmm = 0.; set cb33 1 nmm = 0.; set cb34 1 nmm = 0.
set cb35 1 nmm = 0.; set cb36 1 nmm = 0.; set cb37 1 nmm = 0.; set cb38 1 nmm = 0.


do mm = 1, nmm
  dis mm
  if dis==1 {
    set e = %ran(1)
   }
  else if dis==2 {
    set e = %ranchisqr(4); diff(standardize) e / e
   }
  else {
    set e = %rant(5); diff(standardize) e / e
   }
   
   set(first=%ran(1)) y = %if(y{1}>tau,c1*y{1}+e,c*y{1}+e)

   * TAR_Asy
   set oy  = y
   com low = 1+ fix(ob*0.15), up = ob-fix(ob*0.15), bic = 100000.
   set yd  = y{1}; set oyd = yd; order oyd

   do ind = low, up
     set indi = %if(yd>oyd(ind),1,0);set y1 = indi*oy{1}; set y1m = (1-indi)*oy{1}
     lin(noprint) oy; # y1 y1m
     compute bi = %rss
     if bi < bic {
       com bic=bi, thre_bi = oyd(ind)
     }
   end do ind

   set indi = %if(yd>thre_bi,1,0); set y1 = indi*oy{1}; set y1m = (1-indi)*oy{1}
   lin(noprint) oy / re; # y1 y1m

   com b1    = %beta(1), b2 = %beta(2), v1 = %seesq
   com yhat1 = %if(y(ob)>thre_bi, b1*y(ob), b2*y(ob))
   com lt1   = yhat1-1.96*sqrt(v1), ut1 = yhat1+1.96*sqrt(v1)
   com yhat2 = %if(yhat1>thre_bi, b1*yhat1, b2*yhat1)
   com v2    = %if(yhat1>thre_bi, b1**2*v1+v1, b2**2*v1+v1)
   com lt2   = yhat2-1.96*sqrt(v2), ut2 = yhat2+1.96*sqrt(v2)
   com yhat3 = %if(yhat2>thre_bi, b1*yhat2, b2*yhat2)
   com v3    = %if(yhat2> thre_bi, b1**2*v2+v1, b2**2*v2+v1)
   com lt3   = yhat3-1.96*sqrt(v3), ut3 = yhat3+1.96*sqrt(v3)
   com yhat4 = %if(yhat3>thre_bi, b1*yhat3, b2*yhat3)
   com v4    = %if(yhat3>thre_bi, b1**2*v3+v1, b2**2*v3+v1)
   com lt4   = yhat4-1.96*sqrt(v4), ut4 = yhat4+1.96*sqrt(v4)

   com yhat5 = %if(yhat4>thre_bi, b1*yhat4, b2*yhat4)
   com v5    = %if(yhat4>thre_bi, b1**2*v4+v1, b2**2*v4+v1)
   com lt5   = yhat5-1.96*sqrt(v5), ut5 = yhat5+1.96*sqrt(v5)
   com yhat6 = %if(yhat5>thre_bi, b1*yhat5, b2*yhat5)
   com v6    = %if(yhat5>thre_bi, b1**2*v5+v1, b2**2*v5+v1)
   com lt6   = yhat6-1.96*sqrt(v6), ut6 = yhat6+1.96*sqrt(v6)
   com yhat7 = %if(yhat6>thre_bi, b1*yhat6, b2*yhat6)
   com v7    = %if(yhat6>thre_bi, b1**2*v6+v1, b2**2*v6+v1)
   com lt7   = yhat7-1.96*sqrt(v7), ut7 = yhat7+1.96*sqrt(v7)
   com yhat8 = %if(yhat7>thre_bi, b1*yhat7, b2*yhat7)
   com v8    = %if(yhat7>thre_bi, b1**2*v7+v1, b2**2*v7+v1)
   com lt8   = yhat8-1.96*sqrt(v8), ut8 = yhat8+1.96*sqrt(v8)

   com re(1) = oy(1)
   set yhatb11 1 nb = 0.; set yhatb12 1 nb = 0.; set yhatb13 1 nb = 0.; set yhatb14 1 nb = 0.
   set yhatb15 1 nb = 0.; set yhatb16 1 nb = 0.; set yhatb17 1 nb = 0.; set yhatb18 1 nb = 0.

   set yhatb21 1 nb = 0.; set yhatb22 1 nb = 0.; set yhatb23 1 nb = 0.; set yhatb24 1 nb = 0.
   set yhatb25 1 nb = 0.; set yhatb26 1 nb = 0.; set yhatb27 1 nb = 0.; set yhatb28 1 nb = 0.

   set yhatb31 1 nb = 0.; set yhatb32 1 nb = 0.; set yhatb33 1 nb = 0.; set yhatb34 1 nb = 0.
   set yhatb35 1 nb = 0.; set yhatb36 1 nb = 0.; set yhatb37 1 nb = 0.; set yhatb38 1 nb = 0.

   do bp = 1, nb
     set reb = 0.
     do j = 1, ob
       com reb(j) = re(fix(%uniform(1, ob)))
     end do j
     set(first=oy(1)) yb = %if(yb{1}>thre_bi,b1*yb{1}+reb,b2*yb{1}+reb)

*    Method 1: TAR_Boot_pre_tau
     set oyb = yb
     set ydb = yb{1}
     set indib = %if(ydb>thre_bi,1,0); set y1b = indib*oyb{1}; set y1mb = (1-indib)*oyb{1}
     lin(noprint) oyb; # y1b y1mb
     
     com bb1 = %beta(1), bb2 = %beta(2)
     com yhatb11(bp) = %if(y(ob)>thre_bi, bb1*y(ob)+re(%raninteger(1,ob)),bb2*y(ob)+re(%raninteger(1,ob)))
     com yhatb12(bp) = %if(yhatb11(bp)>thre_bi, bb1*yhatb11(bp)+re(%raninteger(1,ob)),bb2*yhatb11(bp)+re(%raninteger(1,ob)))
     com yhatb13(bp) = %if(yhatb12(bp)>thre_bi, bb1*yhatb12(bp)+re(%raninteger(1,ob)),bb2*yhatb12(bp)+re(%raninteger(1,ob)))
     com yhatb14(bp) = %if(yhatb13(bp)>thre_bi, bb1*yhatb13(bp)+re(%raninteger(1,ob)),bb2*yhatb13(bp)+re(%raninteger(1,ob)))
     com yhatb15(bp) = %if(yhatb14(bp)>thre_bi, bb1*yhatb14(bp)+re(%raninteger(1,ob)),bb2*yhatb14(bp)+re(%raninteger(1,ob)))
     com yhatb16(bp) = %if(yhatb15(bp)>thre_bi, bb1*yhatb15(bp)+re(%raninteger(1,ob)),bb2*yhatb15(bp)+re(%raninteger(1,ob)))
     com yhatb17(bp) = %if(yhatb16(bp)>thre_bi, bb1*yhatb16(bp)+re(%raninteger(1,ob)),bb2*yhatb16(bp)+re(%raninteger(1,ob)))
     com yhatb18(bp) = %if(yhatb17(bp)>thre_bi, bb1*yhatb17(bp)+re(%raninteger(1,ob)),bb2*yhatb17(bp)+re(%raninteger(1,ob)))

*    Method 3: TAR_Boot_biascorrected_beta_with_pre_tau
     set bb1b 1 200 = 0.; set bb2b 1 200 = 0.
     do bpb = 1, 200
       set rebb = 0.
       do j = 1, ob
         com rebb(j) = re(fix(%uniform(1, ob)))
       end do j
       set(first=oy(1)) ybb = %if(ybb{1}>thre_bi,b1*ybb{1}+rebb,b2*ybb{1}+rebb)
       set oyb = ybb
       set ydb = ybb{1}
       set indib = %if(ydb>thre_bi,1,0); set y1b = indib*oyb{1}; set y1mb = (1-indib)*oyb{1}
       lin(noprint) oyb; # y1b y1mb
       
       com bb1b(bpb) = %beta(1), bb2b(bpb) = %beta(2)
     end do bpb
     com b1cor = b1-(%sum(bb1b)/200-b1), b2cor = b2-(%sum(bb2b)/200-b2)

     set(first=oy(1)) ybc = %if(ybc{1}>thre_bi,b1cor*ybc{1}+reb,b2cor*ybc{1}+reb)
     set oyb = ybc
     set ydb = ybc{1}
     set indib = %if(ydb>thre_bi,1,0); set y1b = indib*oyb{1}; set y1mb = (1-indib)*oyb{1}
     lin(noprint) oyb; # y1b y1mb
     
     com bb1 = %beta(1), bb2 = %beta(2)
     com yhatb31(bp) = %if(y(ob)>thre_bi, bb1*y(ob)+re(%raninteger(1,ob)),bb2*y(ob)+re(%raninteger(1,ob)))
     com yhatb32(bp) = %if(yhatb31(bp)>thre_bi, bb1*yhatb31(bp)+re(%raninteger(1,ob)),bb2*yhatb31(bp)+re(%raninteger(1,ob)))
     com yhatb33(bp) = %if(yhatb32(bp)>thre_bi, bb1*yhatb32(bp)+re(%raninteger(1,ob)),bb2*yhatb32(bp)+re(%raninteger(1,ob)))
     com yhatb34(bp) = %if(yhatb33(bp)>thre_bi, bb1*yhatb33(bp)+re(%raninteger(1,ob)),bb2*yhatb33(bp)+re(%raninteger(1,ob)))
     com yhatb35(bp) = %if(yhatb34(bp)>thre_bi, bb1*yhatb34(bp)+re(%raninteger(1,ob)),bb2*yhatb34(bp)+re(%raninteger(1,ob)))
     com yhatb36(bp) = %if(yhatb35(bp)>thre_bi, bb1*yhatb35(bp)+re(%raninteger(1,ob)),bb2*yhatb35(bp)+re(%raninteger(1,ob)))
     com yhatb37(bp) = %if(yhatb36(bp)>thre_bi, bb1*yhatb36(bp)+re(%raninteger(1,ob)),bb2*yhatb36(bp)+re(%raninteger(1,ob)))
     com yhatb38(bp) = %if(yhatb37(bp)>thre_bi, bb1*yhatb37(bp)+re(%raninteger(1,ob)),bb2*yhatb37(bp)+re(%raninteger(1,ob)))

*    Method 2: TAR_Boot_est_tau  
     set oyb = yb
     set ydb = yb{1}; set oydb = ydb; order oydb
     com low = 1+ fix(ob*0.15), up = ob-fix(ob*0.15)
     com bicb = 100000.
     do ind = low, up
       set indi = %if(ydb>oydb(ind),1,0)
       set y1 = indi*oyb{1}; set y1m = (1-indi)*oyb{1}
       lin(noprint) oyb; # y1 y1m
       compute bi = %rss
       if bi < bicb {
         com bicb=bi, thre_bib = oydb(ind)
        }
     end do ind
     set indi = %if(ydb>thre_bib,1,0)
     set y1   = indi*oyb{1}; set y1m = (1-indi)*oyb{1}
     lin(noprint) oyb; # y1 y1m

     com bb1 = %beta(1), bb2 = %beta(2)
     com yhatb21(bp) = %if(y(ob)>thre_bib, bb1*y(ob)+re(%raninteger(1,ob)),bb2*y(ob)+re(%raninteger(1,ob)))
     com yhatb22(bp) = %if(yhatb21(bp)>thre_bib, bb1*yhatb21(bp)+re(%raninteger(1,ob)),bb2*yhatb21(bp)+re(%raninteger(1,ob)))
     com yhatb23(bp) = %if(yhatb22(bp)>thre_bib, bb1*yhatb22(bp)+re(%raninteger(1,ob)),bb2*yhatb22(bp)+re(%raninteger(1,ob)))
     com yhatb24(bp) = %if(yhatb23(bp)>thre_bib, bb1*yhatb23(bp)+re(%raninteger(1,ob)),bb2*yhatb23(bp)+re(%raninteger(1,ob)))
     com yhatb25(bp) = %if(yhatb24(bp)>thre_bib, bb1*yhatb24(bp)+re(%raninteger(1,ob)),bb2*yhatb24(bp)+re(%raninteger(1,ob)))
     com yhatb26(bp) = %if(yhatb25(bp)>thre_bib, bb1*yhatb25(bp)+re(%raninteger(1,ob)),bb2*yhatb25(bp)+re(%raninteger(1,ob)))
     com yhatb27(bp) = %if(yhatb26(bp)>thre_bib, bb1*yhatb26(bp)+re(%raninteger(1,ob)),bb2*yhatb26(bp)+re(%raninteger(1,ob)))
     com yhatb28(bp) = %if(yhatb27(bp)>thre_bib, bb1*yhatb27(bp)+re(%raninteger(1,ob)),bb2*yhatb27(bp)+re(%raninteger(1,ob)))

  end do bp

  order yhatb11; order yhatb12; order yhatb13; order yhatb14
  order yhatb15; order yhatb16; order yhatb17; order yhatb18

  com ltb11 = yhatb11(fix(0.025*nb)), utb11 = yhatb11(fix(0.975*nb))
  com ltb12 = yhatb12(fix(0.025*nb)), utb12 = yhatb12(fix(0.975*nb))
  com ltb13 = yhatb13(fix(0.025*nb)), utb13 = yhatb13(fix(0.975*nb))
  com ltb14 = yhatb14(fix(0.025*nb)), utb14 = yhatb14(fix(0.975*nb))
  com ltb15 = yhatb15(fix(0.025*nb)), utb15 = yhatb15(fix(0.975*nb))
  com ltb16 = yhatb16(fix(0.025*nb)), utb16 = yhatb16(fix(0.975*nb))
  com ltb17 = yhatb17(fix(0.025*nb)), utb17 = yhatb17(fix(0.975*nb))
  com ltb18 = yhatb18(fix(0.025*nb)), utb18 = yhatb18(fix(0.975*nb))

  order yhatb21; order yhatb22; order yhatb23; order yhatb24
  order yhatb25; order yhatb26; order yhatb27; order yhatb28

  com ltb21 = yhatb21(fix(0.025*nb)), utb21 = yhatb21(fix(0.975*nb))
  com ltb22 = yhatb22(fix(0.025*nb)), utb22 = yhatb22(fix(0.975*nb))
  com ltb23 = yhatb23(fix(0.025*nb)), utb23 = yhatb23(fix(0.975*nb))
  com ltb24 = yhatb24(fix(0.025*nb)), utb24 = yhatb24(fix(0.975*nb))
  com ltb25 = yhatb25(fix(0.025*nb)), utb25 = yhatb25(fix(0.975*nb))
  com ltb26 = yhatb26(fix(0.025*nb)), utb26 = yhatb26(fix(0.975*nb))
  com ltb27 = yhatb27(fix(0.025*nb)), utb27 = yhatb27(fix(0.975*nb))
  com ltb28 = yhatb28(fix(0.025*nb)), utb28 = yhatb28(fix(0.975*nb))

  order yhatb31; order yhatb32; order yhatb33; order yhatb34
  order yhatb35; order yhatb36; order yhatb37; order yhatb38

  com ltb31 = yhatb31(fix(0.025*nb)), utb31 = yhatb31(fix(0.975*nb))
  com ltb32 = yhatb32(fix(0.025*nb)), utb32 = yhatb32(fix(0.975*nb))
  com ltb33 = yhatb33(fix(0.025*nb)), utb33 = yhatb33(fix(0.975*nb))
  com ltb34 = yhatb34(fix(0.025*nb)), utb34 = yhatb34(fix(0.975*nb))
  com ltb35 = yhatb35(fix(0.025*nb)), utb35 = yhatb35(fix(0.975*nb))
  com ltb36 = yhatb36(fix(0.025*nb)), utb36 = yhatb36(fix(0.975*nb))
  com ltb37 = yhatb37(fix(0.025*nb)), utb37 = yhatb37(fix(0.975*nb))
  com ltb38 = yhatb38(fix(0.025*nb)), utb38 = yhatb38(fix(0.975*nb))

* Average coverage
  com covt1=0.0, covt2=0.0, covt3=0.0, covt4=0.0
  com covt5=0.0, covt6=0.0, covt7=0.0, covt8=0.0

  com covtb11=0.0, covtb12=0.0, covtb13=0.0, covtb14=0.0
  com covtb15=0.0, covtb16=0.0, covtb17=0.0, covtb18=0.0

  com covtb21=0.0, covtb22=0.0, covtb23=0.0, covtb24=0.0
  com covtb25=0.0, covtb26=0.0, covtb27=0.0, covtb28=0.0

  com covtb31=0.0, covtb32=0.0, covtb33=0.0, covtb34=0.0
  com covtb35=0.0, covtb36=0.0, covtb37=0.0, covtb38=0.0

  do j = 1, nk
    com e1 = e(%raninteger(1,ob)), e2 = e(%raninteger(1,ob)), e3 = e(%raninteger(1,ob)), e4 = e(%raninteger(1,ob))
    com e5 = e(%raninteger(1,ob)), e6 = e(%raninteger(1,ob)), e7 = e(%raninteger(1,ob)), e8 = e(%raninteger(1,ob))

    com yf1 = %if(y(ob)>tau, c1*y(ob)+e1, c*y(ob)+e1)
    com yf2 = %if(yf1>tau, c1*yf1+e2, c*yf1+e2)
    com yf3 = %if(yf2>tau, c1*yf2+e3, c*yf2+e3)
    com yf4 = %if(yf3>tau, c1*yf3+e4, c*yf3+e4)
    com yf5 = %if(yf4>tau, c1*yf4+e5, c*yf4+e5)
    com yf6 = %if(yf5>tau, c1*yf5+e6, c*yf5+e6)
    com yf7 = %if(yf6>tau, c1*yf6+e7, c*yf6+e7)
    com yf8 = %if(yf7>tau, c1*yf7+e8, c*yf7+e8)

    com covt1 = covt1 + (yf1>lt1)*(yf1<ut1),covt2 = covt2 + (yf2>lt2)*(yf2<ut2)
    com covt3 = covt3 + (yf3>lt3)*(yf3<ut3),covt4 = covt4 + (yf4>lt4)*(yf4<ut4)
    com covt5 = covt5 + (yf5>lt5)*(yf5<ut5),covt6 = covt6 + (yf6>lt6)*(yf6<ut6)
    com covt7 = covt7 + (yf7>lt7)*(yf7<ut7),covt8 = covt8 + (yf8>lt8)*(yf8<ut8)

    com covtb11 = covtb11 + (yf1>ltb11)*(yf1<utb11),covtb12 = covtb12 + (yf2>ltb12)*(yf2<utb12)
    com covtb13 = covtb13 + (yf3>ltb13)*(yf3<utb13),covtb14 = covtb14 + (yf4>ltb14)*(yf4<utb14)
    com covtb15 = covtb15 + (yf5>ltb15)*(yf5<utb15),covtb16 = covtb16 + (yf6>ltb16)*(yf6<utb16)
    com covtb17 = covtb17 + (yf7>ltb17)*(yf7<utb17),covtb18 = covtb18 + (yf8>ltb18)*(yf8<utb18)

    com covtb21 = covtb21 + (yf1>ltb21)*(yf1<utb21),covtb22 = covtb22 + (yf2>ltb22)*(yf2<utb22)
    com covtb23 = covtb23 + (yf3>ltb23)*(yf3<utb23),covtb24 = covtb24 + (yf4>ltb24)*(yf4<utb24)
    com covtb25 = covtb25 + (yf5>ltb25)*(yf5<utb25),covtb26 = covtb26 + (yf6>ltb26)*(yf6<utb26)
    com covtb27 = covtb27 + (yf7>ltb27)*(yf7<utb27),covtb28 = covtb28 + (yf8>ltb28)*(yf8<utb28)

    com covtb31 = covtb31 + (yf1>ltb31)*(yf1<utb31),covtb32 = covtb32 + (yf2>ltb32)*(yf2<utb32)
    com covtb33 = covtb33 + (yf3>ltb33)*(yf3<utb33),covtb34 = covtb34 + (yf4>ltb34)*(yf4<utb34)
    com covtb35 = covtb35 + (yf5>ltb35)*(yf5<utb35),covtb36 = covtb36 + (yf6>ltb36)*(yf6<utb36)
    com covtb37 = covtb37 + (yf7>ltb37)*(yf7<utb37),covtb38 = covtb38 + (yf8>ltb38)*(yf8<utb38)

  end do j
  
  com ct1(mm) = covt1/nk, ct2(mm) = covt2/nk, ct3(mm) = covt3/nk, ct4(mm) = covt4/nk
  com ct5(mm) = covt5/nk, ct6(mm) = covt6/nk, ct7(mm) = covt7/nk, ct8(mm) = covt8/nk

  com cb11(mm) = covtb11/nk, cb12(mm) = covtb12/nk, cb13(mm) = covtb13/nk, cb14(mm) = covtb14/nk
  com cb15(mm) = covtb15/nk, cb16(mm) = covtb16/nk, cb17(mm) = covtb17/nk, cb18(mm) = covtb18/nk

  com cb21(mm) = covtb21/nk, cb22(mm) = covtb22/nk, cb23(mm) = covtb23/nk, cb24(mm) = covtb24/nk
  com cb25(mm) = covtb25/nk, cb26(mm) = covtb26/nk, cb27(mm) = covtb27/nk, cb28(mm) = covtb28/nk

  com cb31(mm) = covtb31/nk, cb32(mm) = covtb32/nk, cb33(mm) = covtb33/nk, cb34(mm) = covtb34/nk
  com cb35(mm) = covtb35/nk, cb36(mm) = covtb36/nk, cb37(mm) = covtb37/nk, cb38(mm) = covtb38/nk

end do mm

com tar(1) = %sum(ct1)/nmm, tar(2) = %sum(ct2)/nmm, tar(3) = %sum(ct3)/nmm, tar(4) = %sum(ct4)/nmm
com tar(5) = %sum(ct5)/nmm, tar(6) = %sum(ct6)/nmm, tar(7) = %sum(ct7)/nmm, tar(8) = %sum(ct8)/nmm

com tarb1(1) = %sum(cb11)/nmm, tarb1(2) = %sum(cb12)/nmm, tarb1(3) = %sum(cb13)/nmm, tarb1(4) = %sum(cb14)/nmm
com tarb1(5) = %sum(cb15)/nmm, tarb1(6) = %sum(cb16)/nmm, tarb1(7) = %sum(cb17)/nmm, tarb1(8) = %sum(cb18)/nmm

com tarb2(1) = %sum(cb21)/nmm, tarb2(2) = %sum(cb22)/nmm, tarb2(3) = %sum(cb23)/nmm, tarb2(4) = %sum(cb24)/nmm
com tarb2(5) = %sum(cb25)/nmm, tarb2(6) = %sum(cb26)/nmm, tarb2(7) = %sum(cb27)/nmm, tarb2(8) = %sum(cb28)/nmm

com tarb3(1) = %sum(cb31)/nmm, tarb3(2) = %sum(cb32)/nmm, tarb3(3) = %sum(cb33)/nmm, tarb3(4) = %sum(cb34)/nmm
com tarb3(5) = %sum(cb35)/nmm, tarb3(6) = %sum(cb36)/nmm, tarb3(7) = %sum(cb37)/nmm, tarb3(8) = %sum(cb38)/nmm


if dis==1 {
    set tard11 = tar; set tard12 = tarb1; set tard13 = tarb2; set tard14 = tarb3
  }
  else if dis==2 {
    set tard21 = tar; set tard22 = tarb1; set tard23 = tarb2; set tard24 = tarb3
  }
end do dis

set CPI_1 = tard11; set BPI1_1 = tard12; set BPI2_1 = tard14         
set CPI_2 = tard21; set BPI1_2 = tard22; set BPI2_2 = tard24; set BPI3_2 = tard23
set CPI_3 = tar; set BPI1_3 = tarb1; set BPI2_3 = tarb3; set BPI3_3 = tarb2

* all 8 forecasts
* open data fdata.xls
* data(format=xls,org=columns) / BPI1_1 BPI2_1 BPI3_1 BPI1_2 BPI2_2 BPI3_2 BPI1_3 BPI2_3 BPI3_3
dec vector vti(1)
com vti(1) = 0.95

* spgraph(hfields=3, vfields=1,header='Error Distribution')
* graph(style=symbol, patterns, header="Normal", vgrid = vti, key=below,hlabel="horizon", vlabel="coverage", xlabel=||"1","2","3","4","5","6","7","8"||, min=0.93, max=0.97) 3
* # BPI1_1; # BPI2_1; # BPI3_1

* graph(style=symbol, patterns,header="Chi-Squared", vgrid = vti, key=below,hlabel="horizon", vlabel="coverage", xlabel=||"1","2","3","4","5","6","7","8"||, min=0.93, max=0.97) 3
* # BPI1_2; # BPI2_2; # BPI3_2

* graph(style=symbol, patterns, header="Student T", vgrid = vti, key=below,hlabel="horizon", vlabel="coverage", xlabel=||"1","2","3","4","5","6","7","8"||, min=0.93, max=0.97) 3
* # BPI1_3; # BPI2_3; # BPI3_3
* spgraph(done)


pri / BPI1_1 BPI2_1 BPI3_1 BPI1_2 BPI2_2 BPI3_2 BPI1_3 BPI2_3 BPI3_3




